package net.uzen.office.attached;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.uzen.office.attached.model.Attached;
import net.uzen.office.attached.service.AttachedService;
import net.uzen.office.common.controller.BaseController;
import net.uzen.office.common.model.SessionInfo;
import net.uzen.office.common.util.SessionUtil;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.ModelAndView;

public class AttachedController extends BaseController {

	private static final Log logger = LogFactory.getLog(AttachedController.class);
	
	private AttachedService attachedService;

	public void setAttachedService(AttachedService attachedService) {
		this.attachedService = attachedService;
	}

	public ModelAndView list(HttpServletRequest request,
			HttpServletResponse response) {

		Map<String, Object> requestMap = new HashMap<String, Object>();
		requestMap.put("request", request);

		List<Attached> attachedList = attachedService.getAttachedList(requestMap);

		ModelAndView mav = new ModelAndView();
		mav.addObject("attachedList", attachedList);

		return mav;
	}

	public ModelAndView read(HttpServletRequest request,
			HttpServletResponse response, Attached attached) {

		// TODO : Validation

		Attached attachedResult = attachedService.getAttached(attached);
		if (attachedResult == null) {
			// TODO : 에러 처리
		}

		ModelAndView mav = new ModelAndView();
		mav.addObject("attached", attachedResult);

		return mav;
	}

	public ModelAndView createForm(HttpServletRequest request,
			HttpServletResponse response) {

		ModelAndView mav = new ModelAndView();
		mav.addObject("attached", new Attached());

		return mav;
	}

	public ModelAndView create(HttpServletRequest request,
			HttpServletResponse response, Attached attached) {

		// TODO : Validation

		// 등록 기본 정보를 셋팅한다.
		SessionInfo si = SessionUtil.getSessionInfo(request);
		attached.setCreatorNo(si.getMemberNo());
		attached.setModifierNo(si.getMemberNo());

		// Attached 정보를 등록한다.
		int attachedNo = attachedService.createAttached(attached);

		if (attachedNo == 0) {
			// TODO: 에러 처리
		}

		Map<String, Integer> paramMap = new HashMap<String, Integer>();
		paramMap.put("attachedNo", attachedNo);

		return new ModelAndView("redirect:/attached/read.jude", paramMap);
	}

	public ModelAndView modifyForm(HttpServletRequest request,
			HttpServletResponse response, Attached attached) {
		// SessionUtil 에 어드민인지 확인하는거 추가
		// Admin 인지 아닌지 확인하고 Admin 인 경우 Admin 으로 셋팅한다.

		// 수정 폼 출력이 가능한 경우
		// 1. 레코드 등록자와 로그 인 사용자가 같을 때
		// 2. 로그 인 사용자가 관리자일 때
		SessionInfo si = SessionUtil.getSession(request);
		attached.setCreatorNo(si.getMemberNo());
		if (attached.getCreatorNo() != si.getMemberNo()
				&& !SessionUtil.isAdminSession(request)) {
			attached.setAuthorized(false);
		}

		Attached attached2Modify = attachedService.getAttached(attached);

		if (attached2Modify == null) {
			// 수정 폼에 넣을 데이터를 가져올 수 없다. 즉, 수정 권한이 없다.
			// TODO : 에러처리
		}

		ModelAndView mav = new ModelAndView();
		mav.addObject("attached", attached2Modify);
		
		return mav;
	}

	public ModelAndView modify(HttpServletRequest request,
			HttpServletResponse response, Attached attached) {

		// TODO : Validation

		// 수정이 가능한 경우
		// 1. 레코드 등록자와 로그 인 사용자가 같을 때
		// 2. 로그 인 사용자가 관리자일 때
		SessionInfo si = SessionUtil.getSessionInfo(request);
		attached.setCreatorNo(si.getMemberNo());
		attached.setModifierNo(si.getMemberNo());

		if (attached.getCreatorNo() != si.getMemberNo()
				&& !SessionUtil.isAdminSession(request)) {
			attached.setAuthorized(false);
		}

		// Attached 정보를 수정한다.
		if (!attachedService.modifyAttached(attached)) {
			// TODO : 에러 처리
		}

		Map<String, Integer> paramMap = new HashMap<String, Integer>();
		paramMap.put("attachedNo", attached.getAttachedNo());
		
		return new ModelAndView("redirect:/attached/read.jude", paramMap);
	}

	public ModelAndView delete(HttpServletRequest request,
			HttpServletResponse response, Attached attached) {

		// TODO : Validation
	
		if (!attachedService.deleteAttached(attached)) {
			// TODO : 에러 처리
		}

		return new ModelAndView("redirect:/attached/list.jude");
	}
}
